package com.itheima.stock.stream;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.stream.Stream;

/*
   Stream流中三类方法之一 :  中间方法

   1 Stream<T> filter(Predicate predicate)：用于对流中的数据进行过滤
       Predicate接口中的方法 : boolean test(T t)：对给定的参数进行判断，返回一个布尔值
   2 Stream<T> limit(long maxSize)：截取指定参数个数的数据
   3 Stream<T> skip(long n)：跳过指定参数个数的数据
   4 static <T> Stream<T> concat(Stream a, Stream b)：合并a和b两个流为一个流
   5 Stream<T> distinct()：去除流中重复的元素。依赖(hashCode和equals方法)
   6 Stream<T> sorted () : 将流中元素按照自然排序的规则排序
   7 Stream<T> sorted (Comparator<? super T> comparator) : 将流中元素按照自定义比较器规则排序

   */
@SpringBootTest
public class StreamDemo3 {
    @Test
    public void StreamTest3(){
        //filter过滤 已演示
        ArrayList<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("张翠山");
        list.add("张三丰");
        list.add("谢广坤");
        list.add("赵四");
        list.add("刘能");
        list.add("小沈阳");
        list.add("张良");
        list.add("张良");
        list.add("张良");
        list.add("张良");

        System.out.println("==================limit截取测试========================");
        //limit(long maxSize) 截取指定参数个数的数据
        list.stream().limit(3).forEach(name -> System.out.println(name));

        System.out.println("==================skip跳过测试========================");
        //skip(long n) 跳过指定参数个数的数据
        list.stream().skip(7).forEach(name -> System.out.println(name));

        System.out.println("==================concat合并测试========================");
        //static <T> Stream<T> concat(Stream a, Stream b)：合并a和b两个流为一个流
        ArrayList<Integer> list2 = new ArrayList<>();
        list2.add(3);
        list2.add(1);
        list2.add(2);
        Stream.concat(list.stream(),list2.stream()).forEach(name -> System.out.println(name));

        System.out.println("==================distinct去重测试========================");
        //distinct()：去除流中重复的元素。依赖(hashCode和equals方法)
        list.stream().distinct().forEach(name -> System.out.println(name));

        System.out.println("==================sorted排序测试========================");
        //sorted () : 将流中元素按照自然排序的规则排序 可自定义
        list2.stream().sorted().forEach(num -> System.out.println(num));

    }

}
